package main
import (
	// "container/heap"
	"sort"
)

// // 定义最小堆类型（存储活动结束时间
// type MinHeap []int

// func (h MinHeap) Len() int           { return len(h) }
// func (h MinHeap) Less(i, j int) bool { return h[i] < h[j] }
// func (h MinHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }

// func (h *MinHeap) Push(x interface{}) {
//     *h = append(*h, x.(int))
// }

// func (h *MinHeap) Pop() interface{} {
//     old := *h 
//     n := len(old)
//     x := old[n-1]
//     *h = old[0 : n-1]
//     return x
// }
 
func minmumNumberOfHost( n int ,  startEnd [][]int ) int {
    // if n == 0 {
    //     return 0
    // }
    // sort.Slice(startEnd, func(i, j int) bool {
    //     if startEnd[i][0] == startEnd[j][0] {
    //         return startEnd[i][1] < startEnd[j][1]
    //     } 
    //     return startEnd[i][0] < startEnd[j][0]
    // })
    
    // // 初始化最小堆，存入第一个活动的结束时间
    // h := &MinHeap{startEnd[0][1]}
    // heap.Init(h)

    // for i := 1; i < n; i++ {
    //     curStart := startEnd[i][0]
    //     curEnd := startEnd[i][1]
    //     if curStart >= (*h)[0] {
    //         heap.Pop(h)
    //     } 
    //     heap.Push(h, curEnd)
    // } 
    // return h.Len()

    var start []int
    var end []int
    for i := 0; i < n; i++ {
        start = append(start, startEnd[i][0])
        end = append(end, startEnd[i][1])
    }
    sort.Slice(start, func(i, j int) bool {
        return start[i] < start[j]
    })
    sort.Slice(end, func(i, j int) bool {
        return end[i] < end[j]
    })

    res := 0
    j := 0
    for i := 0; i < n; i++ {
        if (start[i] >= end[j]) {
            j++
        } else {
            res++
        }
    } 
    return res
}










